import { http, toast } from "@/uni_modules/uview-plus";
import store from "@/store/index";

const requestInterceptors = (vm) => {
  /**
   * 请求拦截
   * @param {Object} http
   */
  http.interceptors.request.use(
    (config) => {
      // 可使用async await 做异步操作
      // 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
      config.data = config.data || {};
      // console.log(store.state);
      // console.log(config)
      const token = uni.getStorageSync("token");
      if (token) {
        config.header["Authorization"] = `Bearer ${token}`;
      }
      return config;
    },
    (
      config // 可使用async await 做异步操作
    ) => Promise.reject(config)
  );
};
const responseInterceptors = (vm) => {
  /**
   * 响应拦截
   * @param {Object} http
   */
  http.interceptors.response.use(
    (response) => {
      /* 对响应成功做点什么 可使用async await 做异步操作*/
      const data = response.data;
      // // console.log('http', data)
      // // 自定义参数
      // const custom = response.config?.custom;
      // if (response.statusCode !== 200) {
      //   // 服务端返回的状态码不等于200，则reject()
      //   // 如果没有显式定义custom的toast参数为false的话，默认对报错进行toast弹出提示
      //   if (custom.toast !== false) {
      //     toast(data.message);
      //   }
      //   // 如果需要catch返回，则进行reject
      //   if (custom?.catch) {
      //     return Promise.reject(data);
      //   } else {
      //     // 否则返回一个pending中的promise
      //     return new Promise(() => {});
      //   }
      // }
      return data || {};
    },
    (response) => {
      // 跳转登录页
      if (response.statusCode == 401) {
        store.state.user.isLogin = false;
        uni.setStorageSync("isLogin", false);
        uni.reLaunch({
          url: "/pages/user/login",
        });
      } else if (
        response.statusCode == 403 &&
        store.state.user.currentRoleId == 0
      ) {
        uni.showModal({
          content: "当前账号暂无可用门店，请先注册门店。",
          cancelText: "我再看看",
          confirmColor: "#ff2b2b",
          confirmText: "立即注册",
          success: (result) => {
            if (result.confirm) {
              uni.navigateTo({
                url: "/pages/app/store",
              });
            }
          },
        });
      } else if (response.statusCode == 422) {
        uni.$u.toast(JSON.stringify(response.data), 5000);
      } else if (response.statusCode == 429) {
        uni.$u.toast("请求过于频繁，请稍后再试");
      } else if (response.statusCode >= 500) {
        uni.$u.toast(response.data.error);
      }
      /*  对响应错误做点什么 （statusCode !== 200）*/
      return Promise.reject(response);
    }
  );
};

export { requestInterceptors, responseInterceptors };
